﻿// (c) Norbert Huffschmid
// This source is subject to the Microsoft Public License (Ms-PL).
// Please see http://go.microsoft.com/fwlink/?LinkID=131993 for details.

using System;
using System.Collections.ObjectModel;
using NProtocol;
using NProtocol.Codec;

namespace ShoutBox.Core
{
    /// <summary>
    /// ShoutBox interface
    /// </summary>
    public interface IShoutBox : IDisposable
    {
        /// <summary>
        /// Gets a collection of visible shoutboxes in the network
        /// </summary>
        ObservableCollection<ISessionMember> SessionMembers { get; }


        /// <summary>
        /// Start shout procedure
        /// </summary>
        /// <param name="target">Target of shout operation</param>
        void StartShout(ISessionMember target);

        /// <summary>
        /// Terminate shout procedure
        /// </summary>
        /// <param name="target">Target of EndOfShout operation</param>
        void EndOfShout(ISessionMember target);

        /// <summary>
        /// Stream shout audio data to remote target
        /// </summary>
        /// <param name="target">Target of SetShoutVolume operation</param>
        /// <param name="buffer">Audio buffer</param>
        /// <param name="format">Data format</param>
        void StreamShout(ISessionMember target, byte[] buffer, RealTimeDataFormat format);
    }
}
